home *** CD-ROM | disk | FTP | other *** search
-
- PROGRAM Label_Maker ( input, output, p ) ;
-
- {=============================================================================}
- { }
- { Programme qui fabrique des etiquettes sur imprimantes, de n'importe quel }
- { format et avec ou sans ligne(s) de texte preconcue(s). }
- { }
- { Par Serge Vaillancourt, }
- { avril 1986, }
- { Version 1.0. }
- { }
- {=============================================================================}
-
- CONST
-
- Desk_Item = 8 ;
- Max_li = 25 ;
- {$I gemconst.pas}
-
- TYPE
-
- Tab_Texte = Array [1..Max_li] of string[80] ;
- {$I gemtype.pas}
-
- VAR
-
- P : text ; { Sortie vers imprimante }
- Menu : Menu_Ptr; { desktop }
- Format, { menu }
- Composer : integer ; { " }
- Form_Creer, { sous-menu }
- Form_Sauver, { " }
- Form_Charger, { " }
- Comp_Creer, { " }
- Comp_Imprimer, { " }
- Comp_Quitter : integer ; { " }
- dummy : integer; { parametres inutilises }
- Nb_Lignes, { nombre de lignes sur l'etiquette }
- Nb_Car : integer; { nombre de caracteres par ligne }
- F_Titre, { titre d'une fenetre }
- W_Title : string ; { " }
- Larg_Etiq, { largeur en pouce de l'etiquette }
- Haut_Etiq : real ; { hauteur en pouce de l'etiquette }
- EouP : Array [1..max_li] of char ;
- { indique si ligne est Editable ou Permanente }
- Texte_P : Tab_Texte ; { texte permanent dans format }
- Format_Exist : boolean ; { verifie si un format est deja cree }
-
- {=============================================================================}
-
- {$I gemsubs.pas}
- procedure IO_Check ( b:boolean ) ; external ;
-
- {=============================================================================}
-
- procedure IDENTIFICATION ;
- {-----------------------------------------------------------------------------}
- { Pcd qui affiche le message du debut. Ce message peut aussi etre afficher }
- { lors de la selection de LABEL_MAKER. }
- {-----------------------------------------------------------------------------}
-
- Var
-
- ok : integer ; { valeur retourne par Do_Alert }
- alert : string[255] ; { message porter a l'ecran }
-
- Begin
-
- alert := '[0][ LABEL MAKER V1.0 | Serge Vaillancourt | juin 86 ][ OK ]' ;
- ok := Do_Alert ( alert, 1 ) ;
- Menu_Normal ( Menu, 3 ) ;
-
- End; { IDENTIFICATION }
-
- {=============================================================================}
-
- procedure REVOIR ( txt : Tab_Texte ) ;
- { Pcd qui permet de revoir la forme creee. }
-
- Var
-
- i : integer ; { indice }
-
- Begin
-
- writeln ; writeln ;
- for i:=1 to Nb_Lignes do writeln ('Ligne', i:3, ' (', EouP[i], ') ---> ',
- Txt[i] ) ;
-
- End; { REVOIR }
-
- {=============================================================================}
-
- procedure CREATION_FORMAT ;
- {-----------------------------------------------------------------------------}
- { Pcd qui cree le format de l'etiquette. }
- {-----------------------------------------------------------------------------}
-
- Const
-
- nb_car_po = 10 ; { 10 caracteres au pouce }
- nb_ligne_po = 6 ; { 6 lignes au pouce }
-
- {.............................................................................}
-
- procedure SIZE;
- { pcd qui determine le nombre de ligne et de caractares par ligne de }
- { l'etiquette. }
-
- Const
-
- max_larg = 6.0 ; { largeur max d'une etiquette }
- max_haut = 3.0 ; { hauteur max d'une etiquette }
-
- Var
-
- flag : boolean ; { si entree est conforme }
-
- Begin { SIZE }
-
- writeln ( 'CREATION DU FORMAT' ) ;
- writeln ( '------------------' ) ;
- writeln ; writeln ;
- write ( 'Largeur de l''etiquette : ' ) ;
- repeat
- readln ( Larg_Etiq ) ;
- if Larg_Etiq > max_larg then
- begin
- flag := false ;
- write ( ' Le maximum permis est de', max_larg :4:1, ' pouces : ' ) ;
- end { if Larg_Etiq }
- else if Larg_Etiq < 0.5 then
- begin
- flag := false ;
- write ( ' Le minimum permis est de 0.5 pouce : ' ) ;
- end { else if }
- else flag := true ;
- until flag = true ;
- write ( 'Hauteur de l''etiquette : ' ) ;
- repeat
- readln ( Haut_Etiq ) ;
- if Haut_Etiq > max_haut then
- begin
- flag := false ;
- write ( ' Le maximum permis est de', max_haut :4:1, ' pouces : ' ) ;
- end { if Haut_Etiq }
- else if Haut_Etiq < 0.35 then
- begin
- write ( ' le minimum permis est de 0.35 pouce : ' ) ;
- flag := false ;
- end { else if }
- else flag := true ;
- until flag = true ;
- writeln ;
- Nb_Lignes := ( trunc ( nb_ligne_po * Haut_Etiq ) - 1 ) ;
- Nb_Car := ( trunc ( nb_car_po * Larg_Etiq ) - 3 ) ;
- writeln ( 'Votre etiquette permet', Nb_Lignes :3, ' lignes et', Nb_Car :3,
- ' caracteres par ligne.' ) ;
-
- End; { SIZE }
-
- {.............................................................................}
-
- procedure FORME_EDIT ( li : integer ) ;
- { Pcd qui edite les lignes de texte permanentes. }
-
- Var
-
- j : integer ; { indice }
-
- Begin { FORME_EDIT }
-
- repeat
- write ( 'Ligne', li:3, ' [E]ditable ou [P]ermanente : ' ) ;
- readln ( EouP[li] ) ;
- until ( EouP[li] = 'E' ) or ( EouP[li] = 'P' ) or ( EouP[li] = 'e' ) or
- ( EouP[li] = 'p' ) ;
- if ( EouP[li] = 'P' ) or ( EouP[li] = 'p' ) then
- begin
- write ( ' ' ) ;
- for j := 1 to Nb_Car do write ( '.' ) ;
- writeln ;
- write ( ' ' ) ;
- readln ( Texte_P[li] ) ;
- for j := ( Nb_Car + 1 ) to 80 do Texte_P[li,j] := ' ' ;
- end { if EouP }
- else Texte_P[li] := ' ' ;
-
- End; { FORME_EDIT }
-
- {.............................................................................}
-
- procedure FORME ;
- { Pcd qui cree la forme de l'etiquette, avec entree des lignes de texte }
- { permanentes. }
-
- Var
-
- i : integer ; { indice }
-
- Begin { FORME }
-
- for i := 1 to Nb_Lignes do
- begin
- EouP[i] := ' ' ;
- Texte_P[i] := ' ' ;
- end; { for i }
- writeln ; writeln ;
- writeln ( 'ENTREZ ICI LES LIGNES DE TEXTE PERMANENTES...' ) ;
- writeln ;
- for i := 1 to Nb_Lignes do FORME_EDIT ( i ) ;
-
- End; { FORME }
-
- {.............................................................................}
-
- procedure FORME_OK ;
- { Pcd qui affiche le format de l'etiquette et qui permet de corriger. }
-
- Var
-
- c : char ; { Edit ou Ok }
- i, j, { indice }
- no_li : 1..max_li ; { no de ligne a coriger }
- flag : boolean ; { indique si no.ligne a edit est conforme }
-
- Begin { FORME_OK }
-
- repeat
- REVOIR ( Texte_P ) ;
- writeln ;
- repeat
- write ( '[E]diter [R]evoir [O]k : ' ) ;
- readln ( c ) ;
- until ( c = 'E' ) or ( c = 'O' ) or ( c = 'R' ) or ( c = 'e' )
- or ( c = 'o' ) or ( c = 'r' ) ;
- if ( c = 'E' ) or ( c = 'e' ) then
- begin
- writeln ;
- write ( 'Ligne no : ' ) ;
- repeat
- readln ( no_li ) ;
- if no_li > Nb_Lignes then
- begin
- flag := false ;
- write ( ' no de ligne de 1 @', Nb_Lignes :3, ' : ' ) ;
- end { if no_li }
- else flag := true ;
- until flag = true ;
- FORME_EDIT ( no_li ) ;
- end { if c = 'E' }
- until ( c = 'O' ) or ( c = 'o' ) ;
-
- End; { FORME_OK }
-
- {.............................................................................}
-
- Begin { CREATION_FORMAT }
-
- Hide_Mouse ; { souris disparait }
- Erase_Menu ( Menu ) ; { efface le menu }
- Clear_Screen; { efface l'ecran }
- Format_Exist := true ; { indique qu'il existe maintenant un format }
- SIZE ;
- FORME ;
- FORME_OK ;
- Clear_Screen ;
- Draw_Menu ( Menu ) ; { replace le menu }
- Show_Mouse ; { fait reaparaitre la souris }
- Menu_Normal ( Menu, Format ) ; { eteint le menu FORMAT }
-
- End; { CREATION_FORMAT }
-
- {=============================================================================}
-
- procedure DO_MENU ;
- {-----------------------------------------------------------------------------}
- { Pcd qui affiche le menu a l'ecran. }
- {-----------------------------------------------------------------------------}
-
- Begin
-
- Menu := New_Menu ( 10, ' LABEL MAKER ' ) ;
- { titre du DESK }
- Format := Add_MTitle ( Menu, ' Format ' ) ;
- { menu pour le format de l'etiquette }
- Composer := Add_MTitle ( Menu, ' Composer ' ) ;
- { menu pour composer une etiquette }
- Form_Creer := Add_MItem ( Menu, Format, ' Creer ' ) ;
- { sous-menu pour creer un format }
- Form_Sauver := Add_MItem ( Menu, Format, ' Sauver ' ) ;
- { sous-menu pour sauver un format sur disque }
- Form_Charger := Add_MItem ( Menu, Format, ' Charger ' ) ;
- { sous-menu pour charger un format }
- Comp_Creer := Add_MItem ( Menu, Composer, ' Creer ' ) ;
- { sous-menu pour creer une etiquette }
- Comp_Imprimer := Add_MItem ( Menu, Composer, ' Imprimer ' ) ;
- { sous-menu pour imprimer une etiquette }
- Comp_Quitter := Add_MItem ( Menu, Composer, ' Quitter ' ) ;
- { sous-menu pour retourner au DESKTOP }
-
- End; { DO_MENU }
-
- {=============================================================================}
-
- procedure SAUVER_FORMAT ;
- {-----------------------------------------------------------------------------}
- { Pcd qui sauve sur disque le format de l'etiquette }
- {-----------------------------------------------------------------------------}
-
- Var
-
- File_ok : boolean ; { indique si cliquer OK ou CANCEL }
- F : text ; { fichier logique pour format }
- i, { indice }
- ok : integer ; { valeur retournee par Do_Alert }
- defaut, { nom de fichier par defaut }
- file_name : Path_Name ; { nom veritable du fichier }
-
- Begin
-
- if not ( Format_exist ) then
- begin
- ok := Do_Alert ( '[3][ IL N''Y A PAS DE FORMAT DEJA CREE ][ OK ]', 1 );
- Clear_Screen ;
- Draw_Menu ( Menu ) ;
- end
- else
- begin
- defaut := 'A:*.FMT' ;
- file_name := 'DEFAUT.FMT' ;
- File_ok := Get_In_File ( defaut, file_name ) ;
- if File_ok then
- begin
- rewrite ( F, file_name ) ;
- writeln ( F, Nb_Lignes ) ;
- writeln ( F, Nb_Car ) ;
- for i := 1 to Nb_Lignes do
- begin
- writeln ( F, EouP[i] ) ;
- writeln ( F, Texte_P[i] ) ;
- end; { for i }
- close ( F ) ;
- Hide_Mouse ; Clear_Screen ; Draw_Menu ( menu ) ; Show_Mouse ;
- end; { if File_ok }
- end; { else }
- Menu_Normal ( Menu, Format ) ; { eteint le menu FORMAT }
-
- End; { SAUVER_FORMAT }
-
- {=============================================================================}
-
- procedure CHARGE_FORMAT ;
- {-----------------------------------------------------------------------------}
- { Pcd qui charge en memoire un format existant sur disque. }
- {-----------------------------------------------------------------------------}
-
- Var
-
- File_ok : boolean ; { indique si cliquer OK ou CANCEL }
- F : text ; { fichier logique pour format }
- i, { indice de boucle }
- ok : integer ; { valeur retournee par Do_Alert }
- defaut, { nom de fichier par defaut }
- file_name : Path_Name ; { nom veritable du fichier }
-
- Begin
-
- defaut := 'A:\*.FMT' ;
- File_ok := Get_In_File ( defaut, file_name ) ;
- if File_ok then
- begin
- Format_Existe := true ; { indique qu'il y un format en memoire }
- reset ( F, file_name ) ;
- readln ( F, Nb_Lignes ) ;
- readln ( F, Nb_Car ) ;
- for i := 1 to Nb_Lignes do
- begin
- readln ( F, EouP[i] ) ;
- readln ( F, Texte_P[i] ) ;
- end; { for i }
- close ( F ) ;
- end; { if File_ok }
- Hide_Mouse ; Clear_Screen ; Draw_Menu ( menu ) ; Show_Mouse ;
- Menu_Normal ( menu, Format ) ; { Eteint le menu FORMAT }
-
- End; { CHARGE_FORMAT }
-
- {=============================================================================}
-
- procedure COMPOSITION ;
- {-----------------------------------------------------------------------------}
- { Pcd qui permet a l'usager de composer une etiquette. }
- {-----------------------------------------------------------------------------}
-
- Var
-
- i, j, k, l : integer ; { indices }
- flag : boolean ; { indique s'il y au moins une ligne editable }
- ouiounon : char ; { dans quest. "Autre modification (o/n) ?" }
- ok : integer ; { valeur retournee par Do_Alert }
-
- Begin
-
- if not ( Format_Existe ) then
- begin
- ok := Do_Alert ( '[3][ IL N''Y A PAS DE FORMAT EN MEMOIRE ][ OK ]', 1 );
- Clear_Screen ;
- Draw_Menu ( Menu ) ;
- end
- else
- begin
- Hide_Mouse ;
- flag := false ; { initialise }
- Clear_Screen ;
- writeln ( 'COMPOSITION D''UNE ETIQUETTE' ) ;
- writeln ( '---------------------------' ) ;
- REVOIR ( Texte_P ) ;
- repeat
- writeln ;
- for i := 1 to Nb_Lignes do
- if ( EouP[i] = 'E' ) or ( EouP[i] = 'e' ) then
- begin
- flag := true ;
- write ( 'Ligne', i:3, ' ' ) ;
- for j := 1 to Nb_Car do write ( '.' ) ;
- writeln ;
- write ( ' ' );
- readln ( Texte_P[i] ) ;
- end; { if EouP }
- writeln ;
- if not(flag) then
- begin
- writeln ( '~~~ Il n''y a pas de ligne editable ',
- 'dans ce format ~~~' ) ;
- for k := 1 to 12 do { temps affichage message }
- for l := 1 to 30000 do ; { " " " }
- ouiounon := 'n' ; (* pour boucler la boucle REPEAT *)
- end { if not(flag) }
- else
- begin
- REVOIR ( Texte_P ) ;
- writeln ;
- repeat
- write ('Autre modification (o/n) ? ') ;
- readln ( ouiounon ) ;
- until ( ouiounon = 'o' ) or ( ouiounon = 'O' ) or
- ( ouiounon = 'n' ) or ( ouiounon = 'N' ) ;
- end ; { else }
- until ( ouiounon = 'n' ) or ( ouiounon = 'N' ) ;
- Clear_Screen ;
- Draw_Menu ( menu ) ;
- Show_Mouse ; { fait reaparaitre la souris }
- end ; { else }
- Menu_Normal ( Menu, Composer ) ; { eteint le menu COMPOSER }
-
- End ; { COMPOSITION }
-
- {=============================================================================}
-
- procedure IMPRIME ;
- {-----------------------------------------------------------------------------}
- { Pcd qui imprime, autant de fois signale, le LABEL. }
- {-----------------------------------------------------------------------------}
-
- Var
-
- i,j, { indices }
- Nb_fois : integer ; { nombre de label a imprimer }
- On_line : string [2] ;
- ok : integer ; { valeur retourne par Do_Alert }
-
- Begin
-
- if Format_exist then
- begin
- Hide_Mouse ;
- Clear_Screen ;
- writeln ( 'IMPRIMER L''ETIQUETTE' ) ;
- writeln ( '====================' ) ;
- writeln ;
- writeln ( 'Mettez l''imprimante ON-LINE et tapez OK' ) ;
- writeln ( 'ou appuyez sur Q pour retourner au menu' ) ;
- readln ( On_line ) ;
- while ( On_line <> 'OK' ) and ( On_line <> 'ok' ) and ( On_line <> 'Q' )
- and ( On_line <> 'q' ) and ( On_line <> 'Ok' ) do
- begin
- writeln ( 'OK pour ON-LINE ou Q pour retour au menu' ) ;
- readln ( On_line ) ;
- end; { while }
- if ( On_line = 'OK' ) or ( On_line = 'ok' ) or ( On_line = 'Ok' ) then
- begin
- rewrite ( P, 'PRN:' ) ;
- writeln ;
- write ( 'Indiquez le nombre d''etiquette a imprimer : ' ) ;
- readln ( Nb_fois ) ;
- for i := 1 to Nb_fois do
- begin
- for j := 1 to Nb_lignes do
- writeln ( P, Texte_P[j] ) ; { ecrit chaque ligne }
- writeln (P); { passe une ligne pour positionner tete ecriture a la
- premiere ligne de l'autre etiquette }
- end ; { for i }
- end ; { if }
- end { if Format_Exist }
- else { if Format_Exist }
- ok := Do_Alert ( '[3][IL N''Y A PAS DE FORMAT EN MEMOIRE][OK]', 1) ;
- Clear_Screen ;
- Draw_Menu ( menu ) ;
- Show_Mouse ; { fait reaparaitre la souris }
- Menu_Normal ( Menu, Composer ) ; { eteint le menu COMPOSER }
-
- End ; { IMPRIME }
-
- {=============================================================================}
-
- procedure EXECUTE_MENU ( title, item : integer ) ;
- {-----------------------------------------------------------------------------}
- { Pcd executant les choix au menu. }
- {-----------------------------------------------------------------------------}
-
- Begin
-
- if item = Desk_Item then IDENTIFICATION
- else if item = Form_Creer then CREATION_FORMAT
- else if item = Form_Sauver then SAUVER_FORMAT
- else if item = Form_Charger then CHARGE_FORMAT
- else if item = Comp_Creer then COMPOSITION
- else if item = Comp_Imprimer then IMPRIME
-
- End; { EXECUTE_MENU }
-
- {=============================================================================}
-
- procedure EVENT_LOOP ;
- {-----------------------------------------------------------------------------}
- { Pcd bouclant jusqu'a ce que l'usager choisisse de quitter le pgm. }
- {-----------------------------------------------------------------------------}
-
- Var
-
- choix : integer ; { valeur retournee par Get_Event }
- msg : Message_Buffer ; { messages retournes par GEM }
-
- Begin
-
- repeat
- choix := Get_Event ( E_Message, 0, 0, 0, 0, false, 0, 0, 0, 0, false, 0,
- 0, 0, 0, msg, dummy, dummy, dummy, dummy, dummy,
- dummy ) ;
- { attend un action de l'utilisateur }
- EXECUTE_MENU ( msg[3], msg[4] ) ;
- { execute le choix de l'utilisateur }
- until msg[4] = Comp_Quitter ; { jusqu'a ce qu'il choisisse de quitter }
-
- End; { EVENT_LOOP }
-
- {=============================================================================}
-
- BEGIN { principal }
-
- if Init_Gem >= 0 then { verifie si erreur dans l'appel du GEM }
- begin
- IO_Check( false ) ; { empeche terminer pgm si erreur IO }
- Format_Exist := false ; { initialise }
- DO_MENU ; { cree le menu }
- Hide_Mouse ; { fait disparaitre la souris }
- Clear_Screen ; { efface l'ecran }
- Draw_Menu ( Menu ) ; { affiche le menu }
- Show_Mouse ; { fait apparaitre la souris }
- IDENTIFICATION ; { message du debut }
- Event_Loop ; { coeur du pgm }
- Erase_Menu ( MENU ) ; { efface le menu }
- Exit_Gem ; { retourne au DESKTOP }
- end;
-
- END.
-
- əəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəə